package controller

import (
	"context"
	"mldong/api/base"
	dictItemApi "mldong/api/dictItem"
	"mldong/internal/modules/sys/logic"
	"mldong/internal/modules/sys/service"
	"mldong/utility"

	"github.com/gogf/gf/v2/frame/g"
)

func init() {
	// 注册控制器时自动注入依赖
	utility.RegisterController(&DictItemController{
		// dictItemService: utility.MustResolve(service.DictItemServiceType).(service.IDictItemService),
		// 控制层使用强依赖logic的方式，保证逻辑层的init方法比controller的方法先执行
		dictItemService: utility.MustResolve(service.DictItemServiceType).(*logic.DictItemLogic),
	})
}

type DictItemController struct {
	dictItemService service.IDictItemService
}

// 保存字典项
func (ctrl *DictItemController) Save(ctx context.Context, req *dictItemApi.SaveReq) (res *base.CommonResult, err error) {
	success, err := ctrl.dictItemService.Save(req)
	if err != nil {
		return
	}
	if success {
		jsonData := base.Ok()
		g.RequestFromCtx(ctx).Response.WriteJson(jsonData)
	} else {
		jsonData := base.FailWithDefaultCode("保存字典项失败")
		g.RequestFromCtx(ctx).Response.WriteJson(jsonData)
	}
	return
}

// 修改字典项
func (ctrl *DictItemController) Update(ctx context.Context, req *dictItemApi.UpdateReq) (res *base.CommonResult, err error) {
	success, err := ctrl.dictItemService.Update(req)
	if err != nil {
		return
	}
	if success {
		jsonData := base.Ok()
		g.RequestFromCtx(ctx).Response.WriteJson(jsonData)
	} else {
		jsonData := base.FailWithDefaultCode("修改字典项失败")
		g.RequestFromCtx(ctx).Response.WriteJson(jsonData)
	}
	return
}

// 删除字典项
func (ctrl *DictItemController) Remove(ctx context.Context, req *dictItemApi.RemoveReq) (res *base.CommonResult, err error) {
	success, err := ctrl.dictItemService.Remove(req.Ids)
	if err != nil {
		return
	}
	if success {
		jsonData := base.Ok()
		g.RequestFromCtx(ctx).Response.WriteJson(jsonData)
	} else {
		jsonData := base.FailWithDefaultCode("删除字典项失败")
		g.RequestFromCtx(ctx).Response.WriteJson(jsonData)
	}
	return
}

// 获取字典项详情
func (ctrl *DictItemController) Detail(ctx context.Context, req *dictItemApi.DetailReq) (res *dictItemApi.DetailRes, err error) {
	// 设置 JSON 数据
	jsonData, err := ctrl.dictItemService.Detail(req.ID)
	if err != nil {
		return
	}
	g.RequestFromCtx(ctx).Response.WriteJson(base.Data(jsonData))
	return
}

// 分页查询字典项列表
func (ctrl *DictItemController) Page(ctx context.Context, req *dictItemApi.PageReq) (res *dictItemApi.PageRes, err error) {
	// 传递以m_开头的查询参数
	req.QueryParamMap = utility.GetQueryParamMap(ctx)
	jsonData, err := ctrl.dictItemService.Page(req)
	if err != nil {
		return
	}
	g.RequestFromCtx(ctx).Response.WriteJson(base.Data(jsonData))
	return
}
